package libra.nacosPlugins;

import java.util.Map;

import com.alibaba.nacos.api.config.convert.NacosConfigConverter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 自定义基于NacosConfig的配置文件类型转换器
 * 功能是将配置文件的文本类型转换为指定的数据结构
 * @author libra
 */
public class ConfigConverter implements NacosConfigConverter<Map>{
	/**
	 * 判断期望转换的数据类型是否满足当前Converter的转换条件
	 * @param targetType 
	 * 		被@NacosConfigListener标记，并指定了converter属性的监听器处理方法的入参数据类型
	 */
	@Override
	public boolean canConvert(Class<Map> targetType) {
		// 如果'监听器处理方法入参'与'当前Converter的返回类型'一致，则进行转换处理
		return Map.class.isAssignableFrom(targetType);
	}
	
	/**
	 * 实际的数据类型转换封装处理的逻辑代码
	 * @param config 指定配置文件的文本内容
	 * @return 执行转换处理之后的封装结构
	 */
	@Override
	public Map convert(String config) {
		try {
			return new ObjectMapper().readValue(config, Map.class);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
		return null;
	}
}
